package com.jufanshare.myblog.conf;

import com.zaxxer.hikari.HikariDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

import javax.sql.DataSource;
import java.sql.SQLException;

/**
 * 作用：配置spring boot数据源
 * 作者：Tiddler
 * 时间：2019/1/21 18：35
 * 类名： DataSourceConfig
 **/
@Configuration
public class DataSourceConfig {
    @Autowired
    private HikariConfigEntity hikariConfigEntity;
    @Bean(name = "dataSource")
    public DataSource dataSource(Environment env) throws SQLException {
        HikariDataSource ds=new HikariDataSource();
        ds.setJdbcUrl(env.getProperty("spring.datasource.url"));
        ds.setUsername(env.getProperty("spring.datasource.username"));
        ds.setPassword(env.getProperty("spring.datasource.password"));
        ds.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));

        //Hikari连接池配置，来自application.properties中hikari开头的属性
        ds.setReadOnly(hikariConfigEntity.isReadOnly());
        // 等待连接池分配连接的最大时长（毫秒），超过这个时长还没可用的连接则发生SQLException， 缺省:30秒
        ds.setConnectionTimeout(hikariConfigEntity.getConnectionTimeout());
        ds.setIdleTimeout(hikariConfigEntity.getIdleTimeout());
        //配置检查验证连接池有效性多久检查一次
        ds.setValidationTimeout(hikariConfigEntity.getValidationTimeout());
        ds.setMaxLifetime(hikariConfigEntity.getMaxLifetime());
        ds.setLoginTimeout(hikariConfigEntity.getLoginTimeout());
        ds.setMaximumPoolSize(hikariConfigEntity.getMaximumPoolSize());
        ds.setMinimumIdle(hikariConfigEntity.getMinimumIdle());
        return ds;
    }
}
